package com.ruoyi.system.service.impl;

import java.util.List;

import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONObject;
import com.aliyun.dysmsapi20170525.Client;
import com.aliyun.dysmsapi20170525.models.SendSmsRequest;
import com.aliyun.dysmsapi20170525.models.SendSmsResponse;
import com.aliyun.teautil.models.RuntimeOptions;
import com.google.gson.Gson;
import com.ruoyi.common.utils.SmsUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import com.ruoyi.system.mapper.ParcelInventoryMapper;
import com.ruoyi.system.domain.ParcelInventory;
import com.ruoyi.system.service.IParcelInventoryService;

/**
 * 快递入库Service业务层处理
 *
 * @author ruoyi
 * @date 2024-05-18
 */
@Service
public class ParcelInventoryServiceImpl implements IParcelInventoryService {
    @Autowired
    private ParcelInventoryMapper parcelInventoryMapper;
    @Value("${alisms.appId}")
    private String appId;
    @Value("${alisms.accessKeySecret}")
    private String accessKeySecret;
    @Value("${alisms.signName}")
    private String signName;
    @Value("${alisms.templateCode}")
    private String templateCode;


    /**
     * 查询快递入库
     *
     * @param parcelId 快递入库主键
     * @return 快递入库
     */
    @Override
    public ParcelInventory selectParcelInventoryByParcelId(Long parcelId) {
        return parcelInventoryMapper.selectParcelInventoryByParcelId(parcelId);
    }

    /**
     * 查询快递入库列表
     *
     * @param parcelInventory 快递入库
     * @return 快递入库
     */
    @Override
    public List<ParcelInventory> selectParcelInventoryList(ParcelInventory parcelInventory) {
        return parcelInventoryMapper.selectParcelInventoryList(parcelInventory);
    }

    /**
     * 新增快递入库
     *
     * @param parcelInventory 快递入库
     * @return 结果
     */
    @Override
    public int insertParcelInventory(ParcelInventory parcelInventory) throws Exception {
        parcelInventory.setStatus("1");
        //调用阿里云发送短信
        Client client = SmsUtil.createClient();
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("name", parcelInventory.getRecipientName());
        jsonObject.put("code", parcelInventory.getParcelCode());
        jsonObject.put("order", parcelInventory.getPickupCode());
        SendSmsRequest sendSmsRequest = new SendSmsRequest()
                .setPhoneNumbers(parcelInventory.getRecipientPhone())
                .setSignName(signName)
                .setTemplateCode(templateCode)
                .setTemplateParam(jsonObject.toJSONString());
        SendSmsResponse response = client.sendSmsWithOptions(sendSmsRequest, new RuntimeOptions());
        JSONObject object = JSONObject.parseObject(new Gson().toJson(response.body));
        String code = object.getString("code");
        if (!"OK".equals(code)) {
            parcelInventory.setNotificationSent("0");
        }
        return parcelInventoryMapper.insertParcelInventory(parcelInventory);
    }

    /**
     * 修改快递入库
     *
     * @param parcelInventory 快递入库
     * @return 结果
     */
    @Override
    public int updateParcelInventory(ParcelInventory parcelInventory) {
        return parcelInventoryMapper.updateParcelInventory(parcelInventory);
    }

    /**
     * 批量删除快递入库
     *
     * @param parcelIds 需要删除的快递入库主键
     * @return 结果
     */
    @Override
    public int deleteParcelInventoryByParcelIds(Long[] parcelIds) {
        return parcelInventoryMapper.deleteParcelInventoryByParcelIds(parcelIds);
    }

    /**
     * 删除快递入库信息
     *
     * @param parcelId 快递入库主键
     * @return 结果
     */
    @Override
    public int deleteParcelInventoryByParcelId(Long parcelId) {
        return parcelInventoryMapper.deleteParcelInventoryByParcelId(parcelId);
    }
}
